package app.champaign;

/**
 * 给定两个二叉树，编写一个函数来检验它们是否相同。
 * 
 * 如果两个树在结构上相同，并且节点具有相同的值，则认为它们是相同的。
 * 示例 1: 1         1
          / \       / \
         2   3     2   3

        [1,2,3],   [1,2,3]


        输入:       1         1
                / \       / \
                2   3     2   3

                [1,2,3],   [1,2,3]

        输出: true
        示例 2:

        输入:      1          1
                /           \
                2             2

                [1,2],     [1,null,2]

        输出: false
        示例 3:

        输入:       1         1
                / \       / \
                2   1     1   2

                [1,2,1],   [1,1,2]

        输出: false
 */
public class L100_Same_Tree{

    public static void main(String[] args) {
        
    }

    /**
     * 最简单的策略是使用递归。检查p和q节点是否不是空，它们的值是否相等。如果所有检查都正常，则递归地为子节点执行相同操作。
     * 
     * @param p
     * @param q
     * @return
     */
    public static boolean isSameTree(TreeNode p, TreeNode q) {
        //corner case 
        if(p == null && q == null) return true;
        if(p == null || q  == null) return false;

        // start check
        if(p.val != q.val){
            return false;
        }else{
            return isSameTree(p.left, q.left)&&isSameTree(p.right, q.right);
        }
    }

}